Kotlin Koans 17 Operators overloading

目次

Operators overloading (Playground)

Description

Implement a kind of date arithmetic. Support adding years, weeks and days to a date. You could be able to write the code like this: date + YEAR * 2 + WEEK * 3 + DAY * 15.

日付演算を実装しましょう。日付の年、週、日の加算をサポートし、date + YEAR * 2 + WEEK * 3 + DAY * 15 のようなコードが書けるようにしてください。

At first, add an extension function ‘plus()’ to MyDate, taking a TimeInterval as an argument. Use an utility function MyDate.addTimeIntervals() declared in DateUtil.kt

まず、TimeInterval を引数にとる拡張関数 ‘plus()’ を MyDate に追加します。DateUtil.kt に定義されているユーティリティ関数 MyDate.addTimeIntervals() を使用してください。

Then, try to support adding several time intervals to a date. You may need an extra class.

次に、日付にタイムインターバルを追加できるようにしてください。必要に応じてクラスを追加しましょう。

Code

import TimeInterval.*

data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int)

enum class TimeInterval { DAY, WEEK, YEAR }

operator fun MyDate.plus(timeInterval: TimeInterval): MyDate = addTimeIntervals(timeInterval, 1)

class RepeatedTimeInterval(val timeInterval: TimeInterval, val number: Int)
operator fun TimeInterval.times(number: Int) = RepeatedTimeInterval(this, number)

operator fun MyDate.plus(timeIntervals: RepeatedTimeInterval) = addTimeIntervals(timeIntervals.timeInterval, timeIntervals.number)

fun task1(today: MyDate): MyDate {
    return today + YEAR + WEEK
}

fun task2(today: MyDate): MyDate {
    return today + YEAR * 2 + WEEK * 3 + DAY * 5
}

Memo

← Posts